package com.yzc.model.entity.ticket_order;


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;
import lombok.Getter;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;


/**
 * 主订单表
 *
 * @TableName order_main
 */
@Data
public class OrderMain implements Serializable {

    /**
     * 全局唯一订单号(雪花算法生成)
     */
    @NotNull(message = "[全局唯一订单号(雪花算法生成)]不能为空")
    @TableId(type = IdType.ASSIGN_ID)
    private Long orderId;
    /**
     * 用户ID，关联zc_user.t_user.id
     */
    @NotNull(message = "[用户ID，关联zc_user.t_user.id]不能为空")
    private Long userId;
    /**
     * 业务类型:1-酒店 2-机票 3-景点
     */
    @NotNull(message = "[业务类型:1-酒店 2-机票 3-景点]不能为空")
    private Integer orderType;
    /**
     * 订单总金额(含所有费用)
     */
    @NotNull(message = "[订单总金额(含所有费用)]不能为空")
    private BigDecimal totalAmount;
    /**
     * 主状态:1-待支付 2-已支付 3-已取消
     */
    @NotNull(message = "[主状态:1-待支付 2-已支付 3-已取消]不能为空")
    private Integer orderStatus;
    /**
     * 订单创建时间
     */
    @NotNull(message = "[订单创建时间]不能为空")
    private Date createTime;
    /**
     * 支付成功时间
     */
    private Date paymentTime;
    /**
     * 取消原因(用户填写或系统自动生成)
     */
    @Size(max = 255, message = "编码长度不能超过255")
    private String cancelReason;

    @TableField(exist = false)
    private PayMethod payMethod;


    @Getter
    public enum PayMethod {
        WECHAT_PAY("微信支付"), // 微信支付
        ALIPAY("支付宝"),     // 支付宝
        BANK_CARD("银行卡"),  // 银行卡
        OTHER("其他");   // 其他


        private final String displayName;

        PayMethod(String displayName) {
            this.displayName = displayName;
        }
    }
}
